
import Vue from 'vue'
import Router from 'vue-router'
/* Layout */
import Layout from '@/layout'
import mRouters from './m.js'

Vue.use(Router)

/**
 * Note: 路由配置项
 *
 * hidden: true                   // 【重要】当设置 true 的时候该路由不会再侧边栏出现 如 401，login 等页面，或者如一些编辑页面 /edit/1
 * alwaysShow: true               // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
 *                                // 只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面
 *                                // 若你想不管路由下面的 children 声明的个数都显示你的根路由
 *                                // 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由
 * path: '/login',                // 【重要】访问的 URL 路径
 * component: Layout,             // 【重要】对应的组件；也可以是 (resolve) => require(['@/views/login'], resolve),
 * redirect: noRedirect           // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
 * name:'router-name'             // 【重要】设定路由的名字，一定要填写不然使用 <keep-alive> 时会出现各种问题
 * meta : {
    noCache: true                // 【重要】如果设置为 true，则不会被 <keep-alive> 缓存(默认 false)
    title: 'title'               // 【重要】设置该路由在侧边栏和面包屑中展示的名字
    icon: 'svg-name'             // 【重要】设置该路由的图标，对应路径 src/assets/icons/svg
    breadcrumb: false            // 如果设置为 false，则不会在 breadcrumb 面包屑中显示
    activeMenu: '/system/user'   // 当路由设置了该属性，则会高亮相对应的侧边栏。
  }
 */

// 公共路由
export const constantRoutes = [
  {
    path: '/404',
    component: (resolve) => require(['@/views/error/404'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/401',
    component: (resolve) => require(['@/views/error/401'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/auth',
    component: (resolve) => require(['@/views/auth'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/authRedirect',
    component: (resolve) => require(['@/views/authRedirect'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },

  // 工作台 - 首页
  {
    path: '/',
    component: Layout,
    redirect: 'index',
    children: [
      {
        path: 'index',
        name: 'Index',
        component: (resolve) => require(['@/views/index/index'], resolve),
        name: '工作台',
        meta: { title: '工作台', icon: 'gongzuotai1', affix: true }
      }
    ]
  },

  // 客户管理
  {
    path: '/customer',
    component: Layout,
    redirect: '/customer/index',
    hidden: true,
    children: [
      {
        path: 'detail/:detailId',
        component: (resolve) => require(['@/views/customer/customer/detail.vue'], resolve),
        name: 'customerDetail',
        meta: { title: '客户详情', activeMenu: '/customer/index' }
      },
      {
        path: 'edit/:detailId',
        component: (resolve) => require(['@/views/customer/customer/edit.vue'], resolve),
        name: 'customerEdit',
        meta: { title: '客户编辑', activeMenu: '/customer/index' }
      }
    ]
  },

  // 产品管理 spu
  {
    path: '/product',
    component: Layout,
    redirect: '/product/index',
    hidden: true,
    children: [
      {
        path: 'edit/:productId',
        component: (resolve) => require(['@/views/product/product/detail'], resolve),
        name: 'ProductEdit',
        meta: { title: '修改产品', activeMenu: '/product/index' }
      },
      {
        path: 'add',
        component: (resolve) => require(['@/views/product/product/detail'], resolve),
        name: 'ProductAdd',
        meta: { title: '添加产品', activeMenu: '/product/index' }
      },
      {
        path: 'detail/:productId',
        component: (resolve) => require(['@/views/product/product/detail'], resolve),
        name: 'ProductDetail',
        meta: { title: '添加产品', activeMenu: '/product/index' }
      }
    ]
  },

  // 合同管理
  {
    path: '/contract',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'edit/:contractId',
        component: (resolve) =>
          require(['@/views/contract/contract/detail'], resolve),
        name: 'ContractUpdate',
        meta: { title: '修改合同', activeMenu: '/contract/index' }
      },
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/contract/contract/detail'], resolve),
        name: 'ContractCreate',
        meta: { title: '添加合同', activeMenu: '/contract/index' }
      },
      {
        path: 'detail/:contractId',
        component: (resolve) =>
          require(['@/views/contract/contract/detail'], resolve),
        name: 'ContractDetail',
        meta: { title: '合同详情', activeMenu: '/contract/index' }
      }
    ]
  },

  // 销售管理
  {
    path: '/sale',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'order/edit/:saleOrderId',
        component: (resolve) =>
          require(['@/views/sale/order/detail'], resolve),
        name: 'SaleOrderUpdate',
        meta: { title: '修改销售订单', activeMenu: '/sale/order' }
      },
      {
        path: 'order/add',
        component: (resolve) =>
          require(['@/views/sale/order/detail'], resolve),
        name: 'SaleOrderCreate',
        meta: { title: '添加销售订单', activeMenu: '/sale/order' }
      },
      {
        path: 'order/detail/:saleOrderId',
        component: (resolve) =>
          require(['@/views/sale/order/detail'], resolve),
        name: 'SaleOrderDetail',
        meta: { title: '销售订单详情', activeMenu: '/sale/order' }
      },
      // 销售退货
      {
        path: 'rorder/edit/:saleReturnOrderId',
        component: (resolve) =>
          require(['@/views/sale/rorder/detail'], resolve),
        name: 'SaleReturnOrderUpdate',
        meta: { title: '修改销售退货单', activeMenu: '/sale/rorder' }
      },
      {
        path: 'rorder/add',
        component: (resolve) =>
          require(['@/views/sale/rorder/detail'], resolve),
        name: 'SaleReturnOrderCreate',
        meta: { title: '添加销售退货单', activeMenu: '/sale/rorder' }
      },
      {
        path: 'rorder/detail/:saleReturnOrderId',
        component: (resolve) =>
          require(['@/views/sale/rorder/detail'], resolve),
        name: 'SaleReturnOrderDetail',
        meta: { title: '销售退货单详情', activeMenu: '/sale/rorder' }
      }
    ]
  },

  // 采购管理
  {
    path: '/purchase',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'order/edit/:procureOrderId',
        component: (resolve) =>
          require(['@/views/purchase/order/detail'], resolve),
        name: 'ProcureOrderUpdate',
        meta: { title: '修改采购单', activeMenu: '/purchase/order' }
      },
      {
        path: 'order/add',
        component: (resolve) =>
          require(['@/views/purchase/order/detail'], resolve),
        name: 'ProcureOrderCreate',
        meta: { title: '添加采购单', activeMenu: '/purchase/order' }
      },
      {
        path: 'order/detail/:procureOrderId',
        component: (resolve) =>
          require(['@/views/purchase/order/detail'], resolve),
        name: 'ProcureOrderDetail',
        meta: { title: '采购单详情', activeMenu: '/purchase/order' }
      },
      // 采购退货单
      {
        path: 'rorder/edit/:procureReturnOrderId',
        component: (resolve) =>
          require(['@/views/purchase/rorder/detail'], resolve),
        name: 'PurchaseRorderUpdate',
        meta: { title: '修改采购退货单', activeMenu: '/purchase/rorder' }
      },
      {
        path: 'rorder/add',
        component: (resolve) =>
          require(['@/views/purchase/rorder/detail'], resolve),
        name: 'PurchaseRorderCreate',
        meta: { title: '添加采购退货单', activeMenu: '/purchase/rorder' }
      },
      {
        path: 'rorder/detail/:procureReturnOrderId',
        component: (resolve) =>
          require(['@/views/purchase/rorder/detail'], resolve),
        name: 'PurchaseRorderDetail',
        meta: { title: '采购退货单详情', activeMenu: '/purchase/rorder' }
      }
    ]
  },

  // 开票管理

  // 库存管理

  // 资金管理

  // 目标管理
  {
    path: '/objectives',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'edit',
        component: (resolve) =>
          require(['@/views/sa/objectivesSale/objectivesDetail'], resolve),
        name: 'objectivesEdit',
        meta: { title: '目标详细' }
      },
    ]
  },
  // 配置中心

  // 耀保管理

  // 耀保后台

  // 其他

  //初始配置
  {
    path: '/initConfig',
    component: (resolve) => require(['@/views/initConfig'], resolve),
    hidden: true,
    meta: {
      whitelist: true,
      currency: true
    },
  },
  {
    path: '/test',
    component: (resolve) => require(['@/views/test'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/websocket',
    component: (resolve) => require(['@/views/websocket'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    meta: {
      whitelist: true,
    },
    children: [
      {
        path: '/redirect/:path(.*)',
        component: (resolve) => require(['@/views/redirect'], resolve),
        meta: {
          whitelist: true,
        },
      }
    ]
  },
  {
    path: '/demo',
    component: (resolve) =>
      require(['@/views/demo/index'], resolve),
    hidden: true,
    meta: {
      whitelist: true,
      currency: true
    },
  },
  {
    path: '/bpmDetail',
    component: (resolve) => require(['@/views/member/messagePage/bpmDetail'], resolve),
    hidden: true
  },
  {
    path: '/goodNewsForIssuingOrders',
    component: (resolve) => require(['@/views/member/messagePage/goodNewsForIssuingOrders'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/login',
    component: (resolve) => require(['@/views/login'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/install',
    component: (resolve) => require(['@/views/install'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },

  {
    path: '/sso',
    component: (resolve) => require(['@/views/sso'], resolve),
    hidden: true
  },
  {
    path: '/social-login',
    component: (resolve) => require(['@/views/socialLogin'], resolve),
    meta: {
      whitelist: true,
    },
    hidden: true
  },
  {
    path: '/user',
    component: Layout,
    hidden: true,
    redirect: 'noredirect',
    children: [
      {
        path: 'profile',
        component: (resolve) =>
          require(['@/views/system/user/profile/index'], resolve),
        name: 'Profile',
        meta: { title: '个人中心', icon: 'user' }
      },
      {
        path: 'notify-message',
        component: (resolve) =>
          require(['@/views/system/notify/my/index'], resolve),
        name: 'MyNotifyMessage',
        meta: { title: '业务消息', icon: 'message' }
      },
      {
        path: 'system-notice',
        component: (resolve) =>
          require(['@/views/system/notice/tenant'], resolve),
        name: 'SystemTenantNotice',
        meta: { title: '系统通知', icon: 'message' }
      },
      {
        path: 'task',
        component: (resolve) =>
          require(['@/views/bpm/task/index'], resolve),
        name: 'BpmTask',
        meta: { title: '审批协作', icon: 'message' }
      }

    ]
  },
  {
    path: '/dict',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'type/data/:dictId(\\d+)',
        component: (resolve) => require(['@/views/system/dict/data'], resolve),
        name: 'SystemDictData',
        meta: { title: '字典数据', icon: '', activeMenu: '/system/dict' }
      }
    ]
  },
  {
    path: '/job',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'log',
        component: (resolve) => require(['@/views/infra/job/log'], resolve),
        name: 'InfraJobLog',
        meta: { title: '调度日志', activeMenu: '/infra/job' }
      }
    ]
  },
  {
    path: '/codegen',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'edit/:tableId(\\d+)',
        component: (resolve) =>
          require(['@/views/infra/codegen/editTable'], resolve),
        name: 'InfraCodegenEditTable',
        meta: { title: '修改生成配置', activeMenu: '/infra/codegen' }
      }
    ]
  },
  {
    path: '/bpm',
    component: Layout,
    hidden: true,
    redirect: 'noredirect',
    children: []
  },
  {
    path: '/bpm',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'manager/definition',
        component: (resolve) =>
          require(['@/views/bpm/definition/index'], resolve),
        name: 'BpmProcessDefinition',
        meta: { title: '流程定义', activeMenu: '/bpm/manager/model' }
      },
      {
        path: 'manager/model/design',
        component: (resolve) =>
          require(['@/views/bpm/model/modelEditor'], resolve),
        name: 'BpmModelEditor',
        meta: { title: '设计流程', activeMenu: '/bpm/manager/model' }
      },
      {
        path: 'manager/model/design2',
        component: (resolve) =>
          require(['@/views/bpm/model/modelEditor2'], resolve),
        name: 'BpmModelEditor2',
        meta: { title: '原版设计流程', activeMenu: '/bpm/manager/model' }
      },
      {
        path: 'process-instance/create',
        component: (resolve) =>
          require(['@/views/bpm/processInstance/create'], resolve),
        name: 'BpmProcessInstanceCreate',
        meta: { title: '发起流程', activeMenu: '/bpm/task/my' }
      },
      {
        path: 'process-instance/detail',
        component: (resolve) =>
          require(['@/views/bpm/processInstance/detail'], resolve),
        name: 'BpmProcessInstanceDetail',
        meta: { title: '流程详情', activeMenu: '/bpm/task/my' }
      }
    ]
  },
  {
    path: '/logistics',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'logistics-detail',
        component: (resolve) =>
          require(['@/views/member/saLogistics/detail'], resolve),
        name: 'logistics-detail',
        meta: { title: '发货详情', icon: 'user' }
      }
    ]
  },
  {
    path: '/repayment',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'repayment-detail',
        component: (resolve) =>
          require(['@/views/member/saRepayment/detail'], resolve),
        name: 'repayment-detail',
        meta: { title: '回款详情', icon: 'user' }
      }
    ]
  },
  {
    path: '/inventoryMovement',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'edit',
        component: (resolve) =>
          require(['@/views/wms/inventoryMovement/edit'], resolve),
        name: 'WmsMovementEdit',
        meta: { title: '修改库存调拨' }
      },
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/wms/inventoryMovement/edit'], resolve),
        name: 'WmsMovementAdd',
        meta: { title: '添加库存调拨'}
      },
      {
        path: 'detail',
        component: (resolve) =>
          require(['@/views/wms/inventoryMovement/edit'], resolve),
        name: 'WmsMovementDetail',
        meta: { title: '库存调拨详情'}
      }
    ]
  },
  {
    path: '/invoice',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'edit/:invoiceId',
        component: (resolve) =>
          require(['@/views/member/saInvoice/detail'], resolve),
        name: 'InvoiceUpdate',
        meta: { title: '修改开票', activeMenu: '/invoice-index/InvoiceList' }
      },
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/member/saInvoice/detail'], resolve),
        name: 'InvoiceCreate',
        meta: { title: '添加开票', activeMenu: '/invoice-index/InvoiceList' }
      },
      {
        path: 'detail/:invoiceId',
        component: (resolve) =>
          require(['@/views/member/saInvoice/detail'], resolve),
        name: 'InvoiceDetail',
        meta: { title: '开票详情', activeMenu: '/invoice-index/InvoiceList' }
      }
    ]
  },
  {
    path: '/collection',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/fund/collection/edit'], resolve),
        name: 'FundCollectionOrderEditAdd',
        meta: { title: '添加收款单'}
      },
      {
        path: 'edit',
        component: (resolve) =>
          require(['@/views/fund/collection/edit'], resolve),
        name: 'FundCollectionOrderEdit',
        meta: { title: '修改收款单' }
      },
      {
        path: 'detail',
        component: (resolve) =>
          require(['@/views/fund/collection/edit'], resolve),
        name: 'FundCollectionOrderEditDetail',
        meta: { title: '收款单详情'}
      }
    ]
  },
  {
    path: '/payment',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/fund/payment/edit'], resolve),
        name: 'FundPayMentOrderEditAdd',
        meta: { title: '添加付款单'}
      },
      {
        path: 'edit',
        component: (resolve) =>
          require(['@/views/fund/payment/edit'], resolve),
        name: 'FundPayMentOrderEdit',
        meta: { title: '修改付款单' }
      },
      {
        path: 'detail',
        component: (resolve) =>
          require(['@/views/fund/payment/edit'], resolve),
        name: 'FundPayMentEditDetail',
        meta: { title: '付款单详情'}
      }
    ]
  },

  {
    path: '/writeoff',
    component: Layout,
    hidden: true,
    children: [
      {
        path: 'add',
        component: (resolve) =>
          require(['@/views/fund/writeoff/edit'], resolve),
        name: 'FundWriteOffAdd',
        meta: { title: '添加核销'}
      },
      {
        path: 'detail',
        component: (resolve) =>
          require(['@/views/fund/writeoff/edit'], resolve),
        name: 'FundWriteOffDetail',
        meta: { title: '核销详情'}
      }
    ]
  },
  ...mRouters
]

// 防止连续点击多次路由报错
let routerPush = Router.prototype.push
Router.prototype.push = function push(location) {
  return routerPush.call(this, location).catch((err) => err)
}

// 防止连续点击多次路由报错
let routerReplace = Router.prototype.replace
Router.prototype.replace = function replace(location) {
  return routerReplace.call(this, location).catch((err) => err)
}

export default new Router({
  base: process.env.VUE_APP_APP_NAME ? process.env.VUE_APP_APP_NAME : '/',
  mode: 'history', // 去掉url中的#
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})
